from alg import Solution
import time
from gen import generate_test_cases

def verify_result(num1, num2, result):
    """
    验证结果是否正确
    :param num1: 第一个输入数
    :param num2: 第二个输入数
    :param result: 算法输出结果
    :return: (是否正确, 错误信息)
    """
    # 检查结果中1的个数是否与num2相同
    if bin(result).count('1') != bin(num2).count('1'):
        return False, f"结果中1的个数不正确: 期望 {bin(num2).count('1')}, 实际 {bin(result).count('1')}"
    
    # 检查XOR结果是否最小
    # 这里我们只能检查结果是否合理，因为验证最小XOR需要遍历所有可能解
    if result < 0 or result > 2**31 - 1:
        return False, f"结果超出有效范围: {result}"
    
    return True, "通过"

def run_tests():
    """
    运行所有测试用例
    """
    # 直接生成测试用例
    test_cases = generate_test_cases()
    
    # 创建解决方案实例
    solution = Solution()
    
    # 记录开始时间
    start_time = time.time()
    
    # 运行测试
    total = len(test_cases)
    passed = 0
    failed = 0
    
    print("\n开始测试...")
    print("-" * 50)
    
    for i, (num1, num2) in enumerate(test_cases, 1):
        print(f"\n测试用例 {i}/{total}:")
        print(f"输入: num1 = {num1}, num2 = {num2}")
        
        # 运行算法
        result = solution.minimizeXor(num1, num2)
        
        # 验证结果
        is_correct, message = verify_result(num1, num2, result)
        
        if is_correct:
            print(f"结果: {result}")
            print(f"状态: {message}")
            passed += 1
        else:
            print(f"结果: {result}")
            print(f"状态: 失败 - {message}")
            failed += 1
    
    # 计算运行时间
    end_time = time.time()
    duration = end_time - start_time
    
    # 打印测试报告
    print("\n" + "=" * 50)
    print("测试报告:")
    print(f"总测试用例数: {total}")
    print(f"通过: {passed}")
    print(f"失败: {failed}")
    print(f"总运行时间: {duration:.2f} 秒")
    print("=" * 50)

if __name__ == "__main__":
    run_tests() 